package com.monkey.luffer.design.pattern.strategy;

import com.monkey.luffer.design.pattern.factory.Operation;
import com.monkey.luffer.design.pattern.factory.OperationAdd;

/**
 * @Author dengkaibing
 * @Description 策略上下文
 * 策略模式是一种定义一系列算法的方法，从概念上来看，所有这些算法完成的都是相同的工作
 * 只是实现的不同，它可以以相同的方式调用所有方法，减少了各种算法类与使用算法类之间的耦合
 * @Date 2022/4/4 15:01
 **/
public class StrategyContext {
    /**
     * 策略属性
     */
    private Strategy strategy=null;

    /**
     * 构造方法
     * @param strategy
     */
    private Operation operation=null;

    /**
     * 初始化策略时还是必须把需要实力的对象传进来；
     * @param strategy
     */
    public StrategyContext(Strategy strategy) {
        this.strategy = strategy;
    }

    /**
     * 执行策略
     */
    public void contextInterface() {
        strategy.algorithmInterface();
    }

    public void getOperation(String type){
        switch (type) {
            case "+": operation = new OperationAdd(1,3); break;
        }
    }

    /**
     *
     * @param num1
     * @param num2
     * @return
     */
    public double getResult(double num1,double num2){
        return operation.getResult();
    }

}
